package cn.oms.auth.provider.controller;


import cn.oms.auth.api.dto.req.CheckEmailReq;
import cn.oms.auth.api.dto.req.RegisterReq;
import cn.oms.auth.api.service.IUserService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author AllenChen曾晨
 * @since 2022-04-12
 */
@RestController
@RequestMapping("/user/api")
@Slf4j
@Api(tags = "user API接口")
public class UserController {

    @Autowired
    private IUserService userService;

    /**
     * 用户注册接口
     * @param registerReq
     * @param result
     * @return
     */
    @PostMapping("/register")
    public String registerStudent(
            //@Validated表示激活后面类型的Spring Valiation验证
            //在需要验证的方法参数后添加指定类型(BindingResult)的参数
            //验证结果会自动赋值到这个参数中
            @Validated RegisterReq registerReq,
            BindingResult result) {
        log.debug("收到注册信息:{}", registerReq);
        // 判断验证有没有错误
        if (result.hasErrors()) {
            //获得错误信息
            String msg = result.getFieldError().getDefaultMessage();
            //当有验证不通过时,直接返回错误信息到axios
            return msg;
        }
        //调用业务逻辑层方法实现注册功能
        userService.registerUser(registerReq);
        return "ok";
    }


    /**
     * 检查邮箱是否正确
     * @return
     */
    @PostMapping("/registerCheckEmail")
    public String checkEmail(@Validated CheckEmailReq checkEmailReq,BindingResult result){
        log.debug("收到用户邮箱验证:{}", checkEmailReq);
        // 判断验证有没有错误
        if (result.hasErrors()) {
            //获得错误信息
            String msg = result.getFieldError().getDefaultMessage();
            //当有验证不通过时,直接返回错误信息到axios
            return msg;
        }
        String res = userService.registerCheckEmail(checkEmailReq);

        return "111";
    }


    /**
     * 忘记密码
     * @return
     */
    @PostMapping("/forgotPassword")
    public String forgotPassword(){

//        authUserService
        return "111";
    }


}
